package com.itmuch.cloud.comtroller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.context.annotation.Scope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import com.itmuch.cloud.user.User;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
import com.netflix.ribbon.proxy.annotation.Hystrix;

/**
 * 1.添加commandProperties=@HystrixProperty(name="execution.isolation.strategy",value="SEMAPHORE")，
 * 保证findById和findByIdFallback方法是同一个线程运行，不然的话findById是一个线程，findByIdFallback是一个隔离的线程
 * 
 * 2.http://localhost:8010/health  是显示状态的数据，当服务提供者user关闭服务的时候，服务消费者会不断尝试连接(多次点击)，最后没法连接了，
 * 状态status会发生改变，去连接@HystrixCommand的方法
 *    
 * 3.http://localhost:8010/hystrix.stream 数据一直不断变化，是监控线程，短路器是否打开的数据状态，太多没法查看，
 * 到时候使用Dashboard来查看
 *    
 * */
@RestController
public class MovieController {

	@Autowired
	private RestTemplate restTemplate;
	
	
	@HystrixCommand(fallbackMethod="findByIdFallback",commandProperties=@HystrixProperty(name="execution.isolation.strategy",value="SEMAPHORE"))
	@GetMapping("/movie/{id}")
	public User findById(@PathVariable("id") Long id) {
		return restTemplate.getForObject("http://microservice-provider-user/simple/"+id, User.class);
	}
		
	//findByIdFallback
	public User findByIdFallback(Long id) {
		User user = new User();
		user.setId(0l);
		return user;
	}

	
}
